home *** CD-ROM | disk | FTP | other *** search
/ Aminet 3 / Aminet 3 - July 1994.iso / Aminet / dev / obero / Interfaces3_4.lha / Interfaces / AmigaGuide.mod next >
Text File  |  1994-03-05  |  12KB  |  328 lines

  1. (*
  2. (*  Amiga Oberon Interface Module:
  3. **  $VER: AmigaGuide.mod 40.15 (28.12.93) Oberon 3.0
  4. **
  5. **      (C) Copyright 1991-1993 Commodore-Amiga, Inc.
  6. **          All Rights Reserved
  7. **
  8. **      (C) Copyright Oberon Interface 1993 by hartmut Goebel
  9. **          All Rights Reserved
  10. **
  11. *)      Thanks to Lars Düning for suppling this module
  12. *)
  13.  
  14. MODULE AmigaGuide;
  15.  
  16. IMPORT
  17.   d  * := Dos,
  18.   e  * := Exec,
  19.   I  * := Intuition,
  20.   rx * := Rexx,
  21.   u  * := Utility;
  22.  
  23. (*-------------------------------------------------------------------------*)
  24. CONST
  25.   amigaguideName * = "amigaguide.library";
  26.  
  27. TYPE
  28.   AmigaGuideHostPtr  * = UNTRACED POINTER TO AmigaGuideHost;
  29.   AmigaGuideMsgPtr   * = UNTRACED POINTER TO AmigaGuideMsg;
  30.   ContextTablePtr    * = UNTRACED POINTER TO ContextTable;
  31.   MethodPtr          * = UNTRACED POINTER TO Method;
  32.   Msg                * = MethodPtr;                   (* The official name *)
  33.     OpFindHostPtr    * = UNTRACED POINTER TO OpFindHost;
  34.     OpNodeIOPtr      * = UNTRACED POINTER TO OpNodeIO;
  35.     OpExpungeNodePtr * = UNTRACED POINTER TO OpExpungeNode;
  36.   NewAmigaGuidePtr   * = UNTRACED POINTER TO NewAmigaGuide;
  37.   XRefPtr            * = UNTRACED POINTER TO XRef;
  38.  
  39. CONST
  40.  
  41. (* AmigaGuideMsg.type *)
  42.   apshToolID       * = 11000;
  43.  
  44.   startupMsgID     * = apshToolID + 1;   (* Startup message *)
  45.   loginToolID      * = apshToolID + 2;   (* Login a tool SIPC port *)
  46.   logoutToolID     * = apshToolID + 3;   (* Logout a tool SIPC port *)
  47.   shutdownMsgID    * = apshToolID + 4;   (* Shutdown message *)
  48.   activateToolID   * = apshToolID + 5;   (* Activate tool *)
  49.   deactivateToolID * = apshToolID + 6;   (* Deactivate tool *)
  50.   activeToolID     * = apshToolID + 7;   (* Tool Active *)
  51.   inactiveToolID   * = apshToolID + 8;   (* Tool Inactive *)
  52.   toolStatusID     * = apshToolID + 9;   (* Status message *)
  53.   toolCmdID        * = apshToolID + 10;  (* Tool command message *)
  54.   toolCmdReplyID   * = apshToolID + 11;  (* Reply to tool command *)
  55.   shutdownToolID   * = apshToolID + 12;  (* Shutdown tool *)
  56.  
  57.  
  58. (* Attributes accepted by GetAmigaGuideAttr() *)
  59.   agaDummy    * = u.user;
  60.  
  61.   path      * = agaDummy+1;
  62.   xrefList  * = agaDummy+2;
  63.   activate  * = agaDummy+3;
  64.   context   * = agaDummy+4;
  65.   helpGroup * = agaDummy+5;    (* (ULONG) Unique identifier *)
  66.  
  67.   agaReserved1 * = agaDummy+6;
  68.   agaReserved2 * = agaDummy+7;
  69.   agaReserved3 * = agaDummy+8;
  70.  
  71.   arexxPort * = agaDummy+9;
  72.     (* MsgPortPtr Pointer to the ARexx message port (V40) *)
  73.  
  74.   arexxPortName * = agaDummy+10;
  75.     (* (LSTRPTR) Used to specify the ARexx port name (V40) (not copied) *)
  76.  
  77. TYPE
  78.   AGContext  * = UNTRACED POINTER TO STRUCT END;
  79.  
  80.   AmigaGuideMsg * = STRUCT (msg * : e.Message)
  81.     type    * : LONGINT;         (* Type of message *)
  82.     data    * : e.APTR;          (* Pointer to message data *)
  83.     dSize   * : LONGINT;         (* Size of message data *)
  84.     dType   * : LONGINT;         (* Type of message data *)
  85.     priRet  * : LONGINT;         (* Primary return value *)
  86.     secRet  * : LONGINT;         (* Secondary return value *)
  87.     system1 * : e.APTR;
  88.     system2 * : e.APTR;
  89.   END;
  90.  
  91. (* Allocation description structure *)
  92.   NewAmigaGuide * = STRUCT
  93.     lock       * : d.FileLockPtr;    (* Lock on the document directory *)
  94.     name       * : e.LSTRPTR;        (* Name of document file *)
  95.     screen     * : I.ScreenPtr;      (* Screen to place windows within *)
  96.     pubScreen  * : e.LSTRPTR;        (* Public screen name to open on *)
  97.     hostPort   * : e.LSTRPTR;        (* Application's ARexx port name *)
  98.     clientPort * : e.LSTRPTR;        (* Name to assign to the clients ARexx port *)
  99.     baseName   * : e.LSTRPTR;        (* Base name of the application *)
  100.     flags      * : LONGSET;          (* Flags *)
  101.     context    * : ContextTablePtr;  (* NIL terminated context table *)
  102.     node       * : e.LSTRPTR;        (* Node to align on first (defaults to Main) *)
  103.     line       * : LONGINT;          (* Line to align on *)
  104.     extens     * : u.TagListPtr;     (* Tag array extension *)
  105.     client     * : e.APTR;           (* Private! MUST be NULL *)
  106.   END;
  107.  
  108.  
  109. (* The ContextTable in NewAmigaGuide is an array of e.LSTRPTRs, terminated
  110.  * by a NIL pointer.
  111.  * This definition keeps the array character, but can't be allocated
  112.  * directly with NEW()!
  113.  *)
  114.   ContextTable * = ARRAY MAX(INTEGER) OF e.LSTRPTR;
  115.  
  116.  
  117. CONST
  118.  
  119. (* public Client flags (NewAmigaGuide.flags) *)
  120.   loadIndex  * = 0;     (* Force load the index at init time *)
  121.   loadAll    * = 1;     (* Force load the entire database at init *)
  122.   cacheNode  * = 2;     (* Cache each node as visited *)
  123.   cacheDB    * = 3;     (* Keep the buffers around until expunge *)
  124.   unique     * = 15;    (* Unique ARexx port name *)
  125.   noActivate * = 16;    (* Don't activate window *)
  126.   sysGads    * = 31;
  127.  
  128.  
  129. (* Callback function ID's *)
  130.   open  * = 0;
  131.   close * = 1;
  132.  
  133.  
  134. (* Callback error codes *)
  135.   notEnoughMemory  * = 100;
  136.   cantOpenDataBase * = 101;
  137.   cantFindNode     * = 102;
  138.   cantOpenNode     * = 103;
  139.   cantOpenWindow   * = 104;
  140.   invalidCommand   * = 105;
  141.   cantComplete     * = 106;
  142.   portClosed       * = 107;
  143.   cantCreatePort   * = 108;
  144.   keywordNotFound  * = 113;
  145.  
  146.  
  147. TYPE
  148.  
  149. (* Cross reference node *)
  150.   XRef * = STRUCT (node * : e.Node)
  151.     pad  * : INTEGER;     (* Padding *)
  152.     df   * : e.APTR;      (* Document defined in ('DocFilePtr') *)
  153.     file * : e.LSTRPTR;   (* Name of document file *)
  154.     name * : e.LSTRPTR;   (* Name of item *)
  155.     line * : LONGINT;     (* Line defined at *)
  156.   END;
  157.  
  158.  
  159. CONST
  160.  
  161.   XRSize * = SIZE (XRef);    (* A neato... *)
  162.  
  163. (* Types of cross reference nodes *)
  164.   generic  * = 0;
  165.   function * = 1;
  166.   command  * = 2;
  167.   include  * = 3;
  168.   macro    * = 4;
  169.   struct   * = 5;
  170.   field    * = 6;
  171.   typedef  * = 7;
  172.   define   * = 8;
  173.  
  174.  
  175. TYPE
  176.  
  177. (* Callback handle *)
  178.   AmigaGuideHost * = STRUCT (dispatcher * : u.Hook)
  179.     reserved   * : LONGINT;   (* Must be 0 *)
  180.     flags      * : LONGSET;
  181.     useCnt     * : LONGINT;   (* Number of open nodes *)
  182.     systemData * : e.APTR;    (* Reserved for system use *)
  183.     userData   * : e.APTR;    (* Anything you want... *)
  184.   END;
  185.  
  186.  
  187. CONST
  188.  
  189. (* methods *)
  190.   findNode  * = 1;
  191.   openNode  * = 2;
  192.   closeNode * = 3;
  193.   expunge   * = 10;   (* Expunge DataBase *)
  194.  
  195.  
  196. TYPE
  197.  
  198. (* Basetype of the command structures *)
  199.   Method * = STRUCT
  200.     ID * : LONGINT;
  201.   END;
  202.  
  203.  
  204. (* Method 'findNode' *)
  205.   OpFindHost * = STRUCT (method * : Method)
  206.     attrs - : u.TagListPtr;    (*  R: Additional attributes *)
  207.     node  - : e.LSTRPTR;       (*  R: Name of node *)
  208.     toc   * : e.LSTRPTR;       (*  W: Table of Contents *)
  209.     title * : e.LSTRPTR;       (*  W: Title to give to the node *)
  210.     next  * : e.LSTRPTR;       (*  W: Next node to browse to *)
  211.     prev  * : e.LSTRPTR;       (*  W: Previous node to browse to *)
  212.   END;
  213.  
  214.  
  215. (* Methods 'openNode', 'closeNode' *)
  216.   OpNodeIO * = STRUCT (method * : Method)
  217.     attrs     - : u.TagListPtr; (*  R: Additional attributes *)
  218.     node      - : e.LSTRPTR;    (*  R: Node name and arguments *)
  219.     fileName  * : e.LSTRPTR;    (*  W: File name buffer *)
  220.     docBuffer * : e.LSTRPTR;    (*  W: Node buffer *)
  221.     buffLen   * : LONGINT;      (*  W: Size of buffer *)
  222.     flags     * : LONGSET;      (* RW: Control flags *)
  223.   END;
  224.  
  225.  
  226. CONST
  227.  
  228. (* NodeIO.flags *)
  229.   keep      * = 0;    (* Don't flush this node until database is closed. *)
  230.   reserved1 * = 1;    (* Reserved for system use *)
  231.   reserved2 * = 2;    (* Reserved for system use *)
  232.   ascii     * = 3;    (* Node is straight ASCII *)
  233.   reserved3 * = 4;    (* Reserved for system use *)
  234.   clean     * = 5;    (* Remove the node from the database *)
  235.   done      * = 6;    (* Done with node *)
  236.  
  237. (* NodeIO.attrs (Tag IDs) *)
  238.   htnaDummy     * = u.user;
  239.   htnaScreen    * = htnaDummy + 1;    (* (ScreenPtr) Screen that window resides in *)
  240.   htnaPens      * = htnaDummy + 2;    (* Pen array (from DrawInfo) *)
  241.   rhtnaEctangle * = htnaDummy + 3;    (* Window box *)
  242.  
  243.  
  244. TYPE
  245.  
  246. (* Method 'expunge' *)
  247.   OpExpungeNode * = STRUCT (method * : Method)
  248.     attrs * : u.TagListPtr;    (*  R: Additional attributes *)
  249.   END;
  250.  
  251.  
  252. (*-------------------------------------------------------------------------*)
  253.  
  254. VAR
  255.   base * : e.LibraryPtr;
  256.  
  257. (*--- functions in V40 or higher (Release 3.1) ---*)
  258.  
  259. (* Public entries *)
  260.  
  261. PROCEDURE LockAmigaGuideBase   *{base,-36}(handle{8}  : AGContext): LONGINT;
  262. PROCEDURE UnlockAmigaGuideBase *{base,-42}(key{0}     : LONGINT);
  263. PROCEDURE OpenAmigaGuideA      *{base,-54}(nag{8}     : NewAmigaGuide;
  264.                                            tagList{9} : ARRAY OF u.TagItem): AGContext;
  265. PROCEDURE OpenAmigaGuide       *{base,-54}(nag{8}     : NewAmigaGuide;
  266.                                            tag1{9}    : u.Tag): AGContext;
  267. PROCEDURE OpenAmigaGuideAsyncA *{base,-60}(nag{8}     : NewAmigaGuide;
  268.                                            attrs{0}   : ARRAY OF u.TagItem): AGContext;
  269. PROCEDURE OpenAmigaGuideAsync  *{base,-60}(nag{8}     : NewAmigaGuide;
  270.                                            tag1{0}..  : u.Tag): AGContext;
  271. PROCEDURE CloseAmigaGuide      *{base,-66}(handle{8}  : AGContext);
  272. PROCEDURE AmigaGuideSignal     *{base,-72}(handle{8}  : AGContext): LONGSET;
  273. PROCEDURE GetAmigaGuideMsg     *{base,-78}(handle{8}  : AGContext): AmigaGuideMsgPtr;
  274. PROCEDURE ReplyAmigaGuideMsg   *{base,-84}(msg{8}     : AmigaGuideMsgPtr);
  275. PROCEDURE SetAmigaGuideContextA*{base,-90}(handle{8}  : AGContext;
  276.                                            id{0}      : LONGINT;
  277.                                            tagList{1} : ARRAY OF u.TagItem): BOOLEAN;
  278. PROCEDURE SetAmigaGuideContext *{base,-90}(handle{8}  : AGContext;
  279.                                            id{0}      : LONGINT;
  280.                                            tag1{1}..  : u.Tag): BOOLEAN;
  281. PROCEDURE SendAmigaGuideContextA*{base,-96}(handle{8} : AGContext;
  282.                                            tagList{0} : ARRAY OF u.TagItem): BOOLEAN;
  283. PROCEDURE SendAmigaGuideContext*{base,-96}(handle{8}  : AGContext;
  284.                                            tag1{0}..  : u.Tag): BOOLEAN;
  285. PROCEDURE SendAmigaGuideCmdA   *{base,-102}(handle{8} : AGContext;
  286.                                             cmd{0}    : ARRAY OF CHAR;
  287.                                             tagList{1}: ARRAY OF u.TagItem): BOOLEAN;
  288. PROCEDURE SendAmigaGuideCmd    *{base,-102}(handle{8} : AGContext;
  289.                                             cmd{0}    : ARRAY OF CHAR;
  290.                                             tag1{1}   : u.Tag): BOOLEAN;
  291. PROCEDURE SetAmigaGuideAttrsA  *{base,-108}(handle{8} : AGContext;
  292.                                             tagList{9}: ARRAY OF u.TagItem): LONGINT;
  293. PROCEDURE SetAmigaGuideAttrs   *{base,-108}(handle{8} : AGContext;
  294.                                             tag1{9}.. : u.Tag): LONGINT;
  295. PROCEDURE GetAmigaGuideAttr    *{base,-114}(tag{0}    : u.Tag;
  296.                                             handle{8} : AGContext;
  297.                                             VAR storage{9}: e.APTR): LONGINT;
  298. (* next two are not dokumented in autodocs 40.15, but are in the fd-file
  299.  * hope, they are correct [hG]
  300.  *)
  301. PROCEDURE LoadXRef             *{base,-007EH}(lock{8}: d.FileLockPtr;
  302.                                               name{9}: ARRAY OF CHAR): LONGINT;
  303. PROCEDURE ExpungeXRef          *{base,-0084H}();
  304.  
  305. PROCEDURE AddAmigaGuideHostA   *{base,-138}(hook{8}   : u.HookPtr;
  306.                                             name{0}   : ARRAY OF CHAR;
  307.                                             tagList{9}: ARRAY OF u.TagItem): AmigaGuideHostPtr;
  308. PROCEDURE AddAmigaGuideHost    *{base,-138}(hook{8}   : u.HookPtr;
  309.                                             name{0}   : ARRAY OF CHAR;
  310.                                             tag1{9}.. : u.Tag): AmigaGuideHostPtr;
  311. PROCEDURE RemoveAmigaGuideHostA *{base,-144}(hh{8}    : AmigaGuideHostPtr;
  312.                                             tagList{9}: ARRAY OF u.TagItem): LONGINT;
  313. PROCEDURE RemoveAmigaGuideHost *{base,-144}(hh{8}     : AmigaGuideHostPtr;
  314.                                             tag1{9}.. : u.Tag): LONGINT;
  315. PROCEDURE GetAmigaGuideString  *{base,-210}(id{0}     : LONGINT): e.LSTRPTR;
  316.  
  317. (*-------------------------------------------------------------------------*)
  318.  
  319. (* $StackChk- $RangeChk- $NilChk- $OvflChk- $ReturnChk- $CaseChk- *)
  320.  
  321. BEGIN
  322.   base := e.OpenLibrary (amigaguideName, 33);
  323. CLOSE
  324.   IF base # NIL THEN e.CloseLibrary (base); END;
  325.  
  326. END AmigaGuide.
  327.  
  328.